/**
 * Created by GUOQ on 2016/3/25.
 */
public class Polymorphism {
    static class A {
        public String show(D obj){
            return ("A and D");
        }
    public String show(A obj){
        return ("A and A");
    }
}
    static class B extends A{
        public String show(B obj){
                return ("B and B");
                }
        public String show(A obj){
                return ("B and A");
                }
        }
    static class C extends B{}
    static class D extends B{}

    public static void main(String arg[])
    {
        A a1 = new A();
        A a2 = new B();
        B b = new B();
        C c = new C();
        D d = new D();
        System.out.println(a1.show(b));
        System.out.println(a1.show(c));
        System.out.println(a1.show(d));
        System.out.println(a2.show(b));
        System.out.println(a2.show(c));
        System.out.println(a2.show(d));
        System.out.println(b.show(b));
        System.out.println(b.show(c));
        System.out.println(b.show(d));
    }
}
